<?php
/**
 * Created by PhpStorm.
 * User: bililovy
 * Date: 19-6-19
 * Time: 上午10:22
 * Description:
 */

namespace ServiceSdk\Utils\Validator;

use ServiceSdk\Services\BaseService;

class Validate extends BaseService
{
    /**
     * Description: 验证是否为手机端访问
     * @return bool
     * @Author: Bililovy
     * @Date  : 20-5-22 下午2:46
     */
    public static function isMobileClient()
    {
        //判断是手机登录还是电脑登录
        // 查看是否为手机端的方法
        //判断是手机登录还是电脑登录
        // 如果有HTTP_X_WAP_PROFILE则一定是移动设备
        if (isset ($_SERVER[ 'HTTP_X_WAP_PROFILE' ])) {
            return true;
        }

        //此条摘自TPM智能切换模板引擎，适合TPM开发
        if (isset ($_SERVER[ 'HTTP_CLIENT' ]) && 'PhoneClient' == $_SERVER[ 'HTTP_CLIENT' ]) {
            return true;
        }
        //如果via信息含有wap则一定是移动设备,部分服务商会屏蔽该信息
        if (isset ($_SERVER[ 'HTTP_VIA' ])) //找不到为flase,否则为true
        {
            return stristr($_SERVER[ 'HTTP_VIA' ], 'wap') ? true : false;
        }
        //判断手机发送的客户端标志,兼容性有待提高
        if (isset ($_SERVER[ 'HTTP_USER_AGENT' ])) {
            $clientkeywords = array (
                'nokia',
                'sony',
                'ericsson',
                'mot',
                'samsung',
                'htc',
                'sgh',
                'lg',
                'sharp',
                'sie-',
                'philips',
                'panasonic',
                'alcatel',
                'lenovo',
                'iphone',
                'ipod',
                'blackberry',
                'meizu',
                'android',
                'netfront',
                'symbian',
                'ucweb',
                'windowsce',
                'palm',
                'operamini',
                'operamobi',
                'openwave',
                'nexusone',
                'cldc',
                'midp',
                'wap',
                'mobile'
            );
            //从HTTP_USER_AGENT中查找手机浏览器的关键字
            if (preg_match("/(" . implode('|', $clientkeywords) . ")/i", strtolower($_SERVER[ 'HTTP_USER_AGENT' ]))) {
                return true;
            }
        }
        //协议法，因为有可能不准确，放到最后判断
        if (isset ($_SERVER[ 'HTTP_ACCEPT' ])) {
            // 如果只支持wml并且不支持html那一定是移动设备
            // 如果支持wml和html但是wml在html之前则是移动设备
            if ((strpos($_SERVER[ 'HTTP_ACCEPT' ], 'vnd.wap.wml') !== false) && (strpos($_SERVER[ 'HTTP_ACCEPT' ], 'text/html') === false || (strpos($_SERVER[ 'HTTP_ACCEPT' ], 'vnd.wap.wml') < strpos($_SERVER[ 'HTTP_ACCEPT' ], 'text/html')))) {
                return true;
            }
        }

        return false;
    }

    //校验手机号

    /**
     * Description: 验证手机号 支持 13,15,17,18,19手机号
     *
     * @param string $phone
     *
     * @return bool
     * @Author: Bililovy
     * @Date  : 19-6-21 下午8:41
     */
    public static function isMobile(string $phone): bool
    {
        $phone = self::rmSpace($phone);
        if (preg_match("/^1((3\d)|(4[57])|(5[01256789])|(7\d)|(8\d)|(9\d))\d{8}$/", $phone)) {
            return true;
        } else {
            return false;
        }
    }

    /**
     * Description: 根据微信官方提示的微信号规则，校验是否为微信号
     *
     * @param string $weixin
     *
     * @return bool
     * @Author: Bililovy
     * @Date  : 19-6-21 下午8:41
     */
    public static function isWeixin(string $weixin): bool
    {

        $weixin = self::rmSpace($weixin);

        if (preg_match("/^[a-zA-Z0-9](\w|\-){5,20}$/i", $weixin)) {
            return true;
        } else {
            return false;
        }
    }

    /**
     * Description: 校验是否为电子邮件
     *
     * @param string $email
     *
     * @return bool
     * @Author: Bililovy
     * @Date  : 19-6-21 下午8:42
     */
    public static function isEmail(string $email): bool
    {

        $email = self::rmSpace($email);

        if (preg_match("/^([a-z0-9_]|\\-|\\.)+@(([a-z0-9_]|\\-)+\\.){1,2}[a-z]{2,4}$/i", $email)) {
            return true;
        } else {
            return false;
        }
    }

    /**
     * Description: 验证身份证
     *
     * @param string $idCard
     *
     * @return bool
     * @Author: Bililovy
     * @Date  : 19-6-21 下午8:43
     */
    public static function isIdCard(string $idCard): bool
    {
        $idCard = self::rmSpace($idCard);

        return IdCard::isIdCard($idCard);
    }

    /**
     * Description: 校验是否为qq
     *
     * @param string $qq
     *
     * @return bool
     * @Author: Bililovy
     * @Date  : 19-6-21 下午8:44
     */
    public static function isQQ(string $qq): bool
    {
        $qq = self::rmSpace($qq);
        if (preg_match('/^[1-9][0-9]{4,18}$/', $qq)) {
            return true;
        } else {
            return false;
        }
    }

    /**
     * Description: 移除所有空格字符
     *
     * @param string $value
     *
     * @return string
     * @Author: Bililovy
     * @Date  : 19-6-21 下午9:02
     */
    public static function rmSpace(string $value): string
    {
        $value = preg_replace('/\s*/', '', $value);

        return $value;
    }
}